/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import model.Fornecedor;
import utils.Conexao;
import utils.ExcecaoSCEV;





public class FornecedorDAO {

     public List<Fornecedor> pegarTodos() throws ExcecaoSCEV {
        List<Fornecedor> Fornecedores = new ArrayList<Fornecedor>();
        Fornecedor umFornecedor;

        try {

            Connection db = Conexao.getConnection();
            Statement st = (Statement) db.createStatement();
            ResultSet rs = st.executeQuery(
            "SELECT cod_fornecedor,nome,logradouro,numero,complemento,bairro,cidade,uf,tel_comercial,cnpj FROM Fornecedor");
            while (rs.next()) {
                umFornecedor = new Fornecedor() {};
                umFornecedor.setCodigoFornecedor(rs.getInt(1));
                umFornecedor.setNome(rs.getString(2));
                umFornecedor.setLogradouro(rs.getString(3));
                umFornecedor.setNumero(rs.getString(4));
                umFornecedor.setComplemento(rs.getString(5));
                umFornecedor.setBairro(rs.getString(6));
                umFornecedor.setCidade(rs.getString(7));
                umFornecedor.setUf(rs.getString(8));
                umFornecedor.setTelComercial(rs.getString(9));
                umFornecedor.setCnpj(rs.getString(10));
                Fornecedores.add(umFornecedor);
            }
            rs.close();
           

        } catch (SQLException ex) {
            throw new ExcecaoSCEV("Erro ao listar os Fornecedores. Código " +
                    ex.getSQLState() +
                    "\nDescricao " +
                    ex.getMessage());
        }
        return Fornecedores;
    }

    public void incluir(Fornecedor Fornecedor) throws ExcecaoSCEV {
        try {
            Connection db = Conexao.getConnection();
            PreparedStatement st =
                    db.prepareStatement("insert into fornecedor(cod_fornecedor,nome,logradouro,numero,complemento,bairro,cidade,uf,tel_comercial,cnpj) values (?,?,?,?,?,?,?,?,?,?)");

            st.setInt(1, Fornecedor.getCodigoFornecedor());
            st.setString(2, Fornecedor.getNome());
            st.setString(3, Fornecedor.getLogradouro());
            st.setString(4, Fornecedor.getNumero());
            st.setString(5, Fornecedor.getComplemento());
            st.setString(6, Fornecedor.getBairro());
            st.setString(7, Fornecedor.getCidade());
            st.setString(8, Fornecedor.getUf());
            st.setString(9, Fornecedor.getTelComercial());
            st.setString(10, Fornecedor.getCnpj());
            
            st.executeUpdate();
            st.close();
        } catch (SQLException ex) {
            if (ex.getSQLState().equals("23505")) {
                throw new ExcecaoSCEV("Fornecedor duplicado.");
            } else {
                throw new ExcecaoSCEV("Erro na inclusão do Fornecedor. Código " +
                        ex.getSQLState() +
                        "\nDescricao " +
                        ex.getMessage());
            }
        }

    }

    public void alterar(Fornecedor Fornecedor) throws ExcecaoSCEV {
        try {
            Connection db = Conexao.getConnection();
            PreparedStatement st =
                    db.prepareStatement("update Fornecedor set cod_fornecedor=?,nome=?,logradouro=?,numero=?,complemento=?,bairro=?,cidade=?,uf=?,tel_comercial=?,cnpj=? where cod_fornecedor =?" );
             
              st.setInt(1, Fornecedor.getCodigoFornecedor());
              st.setString(2, Fornecedor.getNome());
              st.setString(3, Fornecedor.getLogradouro());
              st.setString(4, Fornecedor.getNumero());
              st.setString(5, Fornecedor.getComplemento());
              st.setString(6, Fornecedor.getBairro());
              st.setString(7, Fornecedor.getCidade());
              st.setString(8, Fornecedor.getUf());
              st.setString(9, Fornecedor.getTelComercial());
              st.setString(10, Fornecedor.getCnpj());
              st.setInt(11, Fornecedor.getCodigoFornecedor());

            st.executeUpdate();
            st.close();
        } catch (SQLException ex) {
            throw new ExcecaoSCEV("Erro na alteração do Fornecedor.  Código " +
                    ex.getSQLState() +
                    "\nDescricao " +
                    ex.getMessage());
        }
    }

    public void excluir(Fornecedor Fornecedor) throws ExcecaoSCEV {
        try {
            Connection db = Conexao.getConnection();
            PreparedStatement st =
                    db.prepareStatement("delete from Fornecedor where cod_Fornecedor = ? ");
            st.setInt(1, Fornecedor.getCodigoFornecedor());
            st.executeUpdate();
            st.close();
        } catch (SQLException ex) {
            if (ex.getSQLState().equals("23503")) {
                throw new ExcecaoSCEV("Erro na exclusão do Fornecedor.  Código " +
                        ex.getSQLState() +
                        "\nDescricao " +
                        ex.getMessage());
            }
        }
    }

    public void carregar(Fornecedor Fornecedor) throws ExcecaoSCEV {

        try {
            Connection db = Conexao.getConnection();
            PreparedStatement st =
                    db.prepareStatement("SELECT cod_fornecedor,nome,logradouro,numero,complemento,bairro,cidade,uf,tel_comercial,cnpj FROM Fornecedor where cod_Fornecedor = ?");
            st.setInt(1, Fornecedor.getCodigoFornecedor());
            ResultSet rs = st.executeQuery();

            if (rs.next()) {
                Fornecedor.setCodigoFornecedor(rs.getInt(1));
                Fornecedor.setNome(rs.getString(2));
                Fornecedor.setLogradouro(rs.getString(3));
                Fornecedor.setNumero(rs.getString(4));
                Fornecedor.setComplemento(rs.getString(5));
                Fornecedor.setBairro(rs.getString(6));
                Fornecedor.setCidade(rs.getString(7));
                Fornecedor.setUf(rs.getString(8));
                Fornecedor.setTelComercial(rs.getString(9));
                Fornecedor.setCnpj(rs.getString(10));


            }

            rs.close();
        } catch (SQLException ex) {
            throw new ExcecaoSCEV("Erro ao carregar um Fornecedor. Código " + ex.getSQLState() +
                    "\nDescricao " + ex.getMessage());
        }

    }
}

 
  
